package com.kobeliu.entity;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

/**
 * 剑指  32
 *
 * 从上到下打印出二叉树的每个节点，同一层的节点按照从左到右的顺序打印。
 * 例如:
 * 给定二叉树: [3,9,20,null,null,15,7],
 *
 *     3
 *    / \
 *   9  20
 *     /  \
 *    15   7
 *
 * 返回：
 *
 * [3,9,20,15,7]
 *
 */

public class Demo_39_sword_32 {


    public static class TreeNode {
      int val;
      TreeNode left;
      TreeNode right;
      TreeNode(int x) { val = x; }
    }

    public static void main(String[] args) {

    }

    /**
     * 其实就是二叉树的层序遍历 并无难度
     * @param root
     * @return
     */
    public int[] levelOrder(TreeNode root) {
        if(root== null) return new int[]{};

        List<Integer> list = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        TreeNode temp;

        while(queue.size()>0){
            temp = queue.poll();
            if(temp.left!=null) queue.add(temp.left);
            if(temp.right!=null) queue.add(temp.right);
            list.add(temp.val);
        }

        int[] ints = new int[list.size()];

        for(int i=0;i<list.size();i++){
            ints[i] = list.get(i);
        }
        return ints;
    }
}
